package com.cmc.cloud.cmclink.doc.service;

import com.cmc.cloud.cmclink.doc.api.document.rep.VgmRespDto;
import com.cmc.cloud.cmclink.doc.entity.VgmDO;
import com.cmc.cloud.cmclink.doc.vo.vgm.*;
import com.cmes.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.util.List;

/**
 * VMG信息 Service 接口
 *
 * @author 集运管理员
 */
public interface VgmService {

    /**
     * 导入vgm
     *
     * @param vgmImportReqVoList
     * @param vesselCode
     * @param voyage
     * @param port
     * @return
     */
    List<VgmImportReqVO> importVgm(@Valid List<VgmImportReqVO> vgmImportReqVoList, String vesselCode, String voyage, String port);

    /**
     * 校验
     *
     * @param vgmImportReqVoList
     * @param vesselCode
     * @param voyage
     * @param port
     * @return
     */
    List<VgmImportReqVO> check(List<VgmImportReqVO> vgmImportReqVoList, String vesselCode, String voyage, String port);

    /**
     * 更新VMG信息
     *
     * @param updateReqVO 更新信息
     */
    void updateVgm(@Valid VgmUpdateReqVO updateReqVO);

    /**
     * 删除VMG信息
     *
     * @param id 编号
     */
    void deleteVgm(Long id);

    /**
     * 获得VMG信息分页
     *
     * @param pageReqVo 分页查询
     * @return VMG信息分页
     */
    PageResult<VgmDO> getVgmPage(VgmPageReqVO pageReqVo);


    /**
     * 创建 vgm
     *
     * @param vgmCreateReqVo
     */
    void createVgm(VgmCreateReqVO vgmCreateReqVo);

    /**
     * 查询vgm
     *
     * @param reqVo
     * @return
     */
    List<VgmDO> getVgm(VgmQueryVO reqVo);

    /**
     * 批量查询
     *
     * @param vgmQueryInfoVo
     * @return
     */
    List<VgmDO> getVgmInfo(VgmQueryInfoVO vgmQueryInfoVo);

    /**
     * 批量查询(提单号)
     *
     * @param blnos 提单号
     * @return List<VgmDO>
     */
    List<VgmDO> getVgmByBlnos(List<String> blnos);

    /**
     * 批量新增或者修改vgm
     *
     * @param vgmInfoList
     * @return
     */
    void saveOrupdateVgmInfo(List<VgmCreateReqVO> vgmInfoList);

    /**
     * 查询VGM详情信息
     *
     * @param vgmId 提单号
     * @return List<VgmDO>
     */
    VgmDO getVgmDetail(Long vgmId);

    /**
     * 获取发货人邮箱和电话
     *
     * @param vgmRespDtos
     */
    void queryTelAndEmailInfo(List<VgmRespDto> vgmRespDtos);

    /**
     * 更正VGM信息
     *
     * @param vgmCreateReqVOList
     */
    void changeSiVgm(List<VgmCreateReqVO> vgmCreateReqVOList);

    /**
     * eid 查询接口
     *
     * @param vgmQueryEdiVo
     * @return
     */
    List<VgmDO> getVgmEdi(VgmQueryEdiVO vgmQueryEdiVo);
}
